<?php
/*
  Released under the GNU General Public License

  Denne applikasjonen er oprinnelig portert fra oscommerce av
  Ingvald Haaland - ingvald@haaland.net

  Senere omskrevet og forbedret av Rune Rasmussen - http://www.syntaxerror.no
  Bl.a. for å gi fraktberegning også for brukere som ikke er innlogget,
  eller ikke har oppgitt postnummer. Samt forbedret fraktberegning, lagt inn oversettelse m.m.
  
Senere omskrevet av Arne Unneland (http://www.unneland.com) til å bruke Bring Fraktguide (http://fraktguide.bring.no) i februar 2009. 
  - Modulen benytter Bring Fraktguide XML API. Dette er gratis og krever ikke registrering, men forutsetter aksept av bruksvilkår som er tilgjengelig på http://fraktguide.bring.no/. De som bruker denne modulen anbefales å registrere seg på Bring Fraktguide da kun registrerte brukere får beskjed om endringer i underliggende tjenester. Anbefaler også å lese informasjon om XML API da det er noen forutsetninger for de prisene som presenteres. Bla. må pakkene være forhåndsmeldt m/EDI.
  - Denne modulen er et privat initativ og på ingen måte er et Bring eller Posten produkt. Modulen brukes på eget ansvar og dersom man finner feil er det bare å fikse + melde tilbake til forumet på Zen Cart Norge :-)
  - Modulen leverer fraktkostnad for angitt produkt, samt produkttekster, hjelpetekster og transporttid. Noe av dette vises i den enkelte fraktmodul og kan tilpasses til den enkeltes behov.
  - Merk at det er gjort forenklinger i Zen Cart rundt fraktberegning. Det. er bla. kun fysisk vekt på pakkene, mens mange pakker prises etter fraktberegnet vekt (volum). Dette bør man ta hensyn til når man setter opp vekten på varene sine.
 
  Tips til forbedringer av denne modulen ligger i bring_fraktguide_common/bring_fraktguide_common.php
  
  
  Dette er en portert versjon for VirtueMart. Omskrevet av Magnus Feiring i Juli 2010.
  
*/

//Only once - remove comment if you are not using bring_APOST.php
include_once CLASSPATH .'shipping/bring/bring_fraktguide_common.php';



class bringbpakkedor {

	var $classname = "bringbpakkedor";
	
	function list_rates( &$d ) {
		global $total, $tax_total, $CURRENCY_DISPLAY, $VM_LANG,$vmLogger;

		$cart = $_SESSION['cart'];

		/** Read current Configuration ***/
		require_once(CLASSPATH ."shipping/".$this->classname.".cfg.php");

		if ( $_SESSION['auth']['show_price_including_tax'] != 1 ) {
			$taxrate = 1;
			$order_total = $total + $tax_total;
		}
		else {
			$taxrate = $this->get_tax_rate() + 1;
			$order_total = $total;
		}

		//Create DB User Object for Current User
		$dbu = new ps_DB;
		$q  = "SELECT country,zip FROM #__{vm}_user_info WHERE user_info_id = '". $d["ship_to_info_id"] . "'";
		$dbu->query($q);
		if (!$dbu->next_record()) {
			$vmLogger->err( $VM_LANG->_('PHPSHOP_CHECKOUT_ERR_SHIPTO_NOT_FOUND',false) );
			return False; 
		}

		//Create DB Vendor Object for Shop Vendor
		$dbv = new ps_DB;
		$q  = "SELECT * from #__{vm}_vendor, #__{vm}_country WHERE vendor_id='" . $_SESSION["ps_vendor_id"] . "' AND (vendor_country=country_2_code OR vendor_country=country_3_code)";
		$dbv->query($q);
		$dbv->next_record();

		$selected = False ;

		//$dbv = new ps_DB
		//$q  = "SELECT * FROM #__{vm}_vendor WHERE vendor_id='".$_SESSION['ps_vendor_id']."'";
		//$dbv->query($q);
		//$dbv->next_record();

		
		//set up the variables for Bring Post Query

		//Postcode of the pick-up address (e.g. 3015)
		$fra_nr = $dbv->f("vendor_zip");

		//The weight of the parcel or item measured in grams (g)
		//$Order_Weight = '10000';
		$shipping_weight = $d['weight'];
		$shipping_num_boxes = 1; //VM kalkulerer ikke med bokser, så setter denne til 1.
		$weightMassType = 'Kilo';
		$country = $dbu->f('country');
		
		//Postcode of the delivery destination (e.g. 2615)
		//denne settes i VM store config
		if ($dbu->f("zip") > 0 ) {
			$til_nr = $dbu->f("zip");
		} else {
			$til_nr = $fra_nr;
		}
		
		//behandlingsavgift (om ingen settes til null)
		if (SHIPPING_HANDLING > 0) {
			$shippingfee = SHIPPING_HANDLING;
		} else {
			$shippingfee = 0;
		}

		
		$productCode = "BPAKKE_DOR-DOR";
		
		 // getValuesForProduct - se bring_fraktguide_common.php for detaljer og forutsetninger
		$fraktArray = getValuesForProduct($productCode, $fra_nr, $til_nr, $shipping_weight, $shipping_num_boxes, $weightMassType, false);
		

		$total_shipping_handling = $fraktArray['cost'] + $shippingfee ;
		$total_shipping_handling *= $taxrate ;
		$total_shipping_handling = round($total_shipping_handling);
		$show_shipping_handling = $CURRENCY_DISPLAY->getFullValue( $total_shipping_handling ) ;
		$tooltiptext = wordwrap($fraktArray['helptext'], 50, "<br />\n");
		
		// THE ORDER OF THOSE VALUES IS IMPORTANT:
		// ShippingClassName|carrier_name|rate_name|totalshippingcosts|rate_id
		$shipping_rate_id = urlencode( $this->classname."|Bring|".$fraktArray['displayname']."|".number_format($total_shipping_handling,2));
		
		$html = '<div id="bringshipping" class="'.$this->classname.'">';
		$html .= "\n<input type=\"radio\" name=\"shipping_rate_id\" id=\"$this->classname\" checked=\"checked\" value=\"$shipping_rate_id\" />\n";
		$html .= '<span class="bringname">'.$fraktArray['displayname'].'</span>&nbsp;&nbsp;';
		$html .= mm_ToolTip($tooltiptext);
		//$html .= ': ';
		$html .= '<span class="bringprice" style="float:right;">'.$show_shipping_handling.'</span>';
		$html .= '<div class="bringdesc">'.$fraktArray['description'].'</div>';
		$html .= '<div class="bringdays">'.$fraktArray['workingdays'].'</div>';
		$html .= '</div>';
		
		

		// vis fraktalternativet
		if ($fraktArray != null && $country =='NOR') {
			echo $html ;
			$_SESSION[$shipping_rate_id] = 1;
			
		} else {
			
			
		// Ikke vis noe om over satt maksimumsvekt
			$vmLogger->debug( "The Shipping Module '" . __CLASS__ . "' couldn't 
				find a Shipping Rate that matches the current Checkout configuration:
				Weight: " . $d['weight'] . "
				Country: $country
				ZIP: $zip" ) ;
		}
		
		return True ;

	}
	
	/**************************************************************************
	 * name: get_rate()
	 * created by: soeren
	 * description: returns the money to payfor from the given rate id
	 * parameters: $rate_id : The id of therate
	 * returns: a decimal value
	 **************************************************************************/
	function get_rate( &$d ) {
		
		$shipping_rate_id = $d["shipping_rate_id"] ;
		$is_arr = explode( "|", urldecode( urldecode( $shipping_rate_id ) ) ) ;
		$order_shipping = $is_arr[3] ;
		
		return $order_shipping ;
	
	}
	
	
	/** regner ut skatt ***/
	function get_tax_rate() {


		if( intval(BRING_TAX_CLASS)== 0 )
		return( 0 );
		else {
			require_once( CLASSPATH. "ps_tax.php" );
			$tax_rate = ps_tax::get_taxrate_by_id( intval(BRING_TAX_CLASS) );
			return $tax_rate;
		}
	}

	/* Validate this Shipping method by checking if the SESSION contains the key
	* @returns boolean False when the Shipping method is not in the SESSION
	*/
	function validate( $d ) {

		$shipping_rate_id = $d["shipping_rate_id"];

		if( array_key_exists( $shipping_rate_id, $_SESSION ))
		return true;
		else
		return false;
	}



	/**
    * Show all configuration parameters for this Shipping method
    * @returns boolean False when the Shipping method has no configration
    */
	

	

	function show_configuration() {
		global $VM_LANG;
		/** Read current Configuration ***/
		require_once(CLASSPATH ."shipping/".$this->classname.".cfg.php");
    ?>
      <table>
    <tr>
        <td><img src="http://fraktguide.bring.no/fraktguide/images/logo.gif" alt="Bring Logo"></td>
    </tr>


	  <tr>
		<td><strong><?php echo $VM_LANG->_('PHPSHOP_UPS_TAX_CLASS') ?></strong></td>
		<td>
		  <?php
		  require_once(CLASSPATH.'ps_tax.php');
		  ps_tax::list_tax_value("BRING_TAX_CLASS", BRING_TAX_CLASS) ?>
		</td>
		<td><?php echo mm_ToolTip($VM_LANG->_('PHPSHOP_UPS_TAX_CLASS_TOOLTIP')) ?><td>
	  </tr>	
	</table>
   <?php
   // return false if there's no configuration
   return true;
	}
	/**
  * Returns the "is_writeable" status of the configuration file
  * @param void
  * @returns boolean True when the configuration file is writeable, false when not
  */
	function configfile_writeable() {
		return is_writeable( CLASSPATH."shipping/".$this->classname.".cfg.php" );
	}

	/**
	* Writes the configuration file for this shipping method
	* @param array An array of objects
	* @returns boolean True when writing was successful
	*/
	function write_configuration( &$d ) {
	    global $vmLogger;

		$my_config_array = array(
		"BRING_TAX_CLASS" => $d['BRING_TAX_CLASS']
		);
		$config = "<?php\n";
		$config .= "if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); \n\n";
		foreach( $my_config_array as $key => $value ) {
			$config .= "define ('$key', '$value');\n";
		}

		$config .= "?>";

		if ($fp = fopen(CLASSPATH ."shipping/".$this->classname.".cfg.php", "w")) {
			fputs($fp, $config, strlen($config));
			fclose ($fp);
			return true;
		}
		else {
			$vmLogger->err( "Error writing to configuration file" );
			return false;
		}
	}
}


?>
